package com.bootdo.system.service;

import com.bootdo.common.domain.Tree;
import com.bootdo.system.domain.ItemDO;

import java.util.List;
import java.util.Map;

/**
 * 检查项目service
 *
 * @author zhouxm
 */
public interface ItemService {
    /**
     * 根据主键获取
     * @param itemId 主键
     * @return
     */
    ItemDO get(Long itemId) throws Exception;

    /**
     * 获取项目列表
     * @param map
     * @return
     * @throws Exception
     */
    List<ItemDO> list(Map<String, Object> map);

    /**
     * 获取项目数量
     * @param map
     * @return
     * @throws Exception 异常
     */
    int count(Map<String, Object> map) throws Exception;

    /**
     * 保存
     * @param itemDO
     * @return
     * @throws Exception 异常
     */
    int save(ItemDO itemDO) throws Exception;

    /**
     * 修改
     * @param itemDO
     * @return
     * @throws Exception 异常
     */
    int update(ItemDO itemDO) throws Exception;

    /**
     * 删除
     * @param itemId
     * @return
     * @throws Exception 异常
     */
    int remove(Long itemId) throws Exception;

    /**
     * 批量删除
     * @param itemIds
     * @return
     * @throws Exception 异常
     */
    int batchRemove(Long[] itemIds) throws Exception;

    /**
     * 获取项目树形结构
     * @return
     * @throws Exception 异常
     */
    Tree<ItemDO> getTree() throws Exception;

    /**
     * 校验项目底下是否有子项目
     * @param itemId
     * @return
     * @throws Exception 异常
     */
    boolean checkItemHasUser(Long itemId) throws Exception;

    /**
     * 获取项目底下的子项目
     * @param parentId
     * @return
     * @throws Exception 异常
     */
    List<Long> listChildrenIds(Long parentId) throws Exception;
}
